package com.xayy.health.mgt.service;

import cn.kawins.base.result.CheckResult;
import cn.kawins.mybatis.BaseService;
import com.github.pagehelper.PageInfo;
import com.xayy.health.mgt.model.DataQuality;
import com.xayy.health.mgt.model.DataQualityReport;
import com.xayy.health.mgt.model.DiagnoseMultipleParametersData;
import com.xayy.health.mgt.model.TaskChildInfo;
import com.xayy.health.mgt.model.dto.DataFeatureDto;
import com.xayy.health.mgt.model.dto.DataQualityDto;
import com.xayy.health.mgt.model.vo.DataSourceVo;
import com.xayy.health.mgt.model.vo.HandWinkingVo;
import com.xayy.health.mgt.model.vo.QualityVo;
import com.xayy.health.mgt.model.vo.ReportVo;

import java.net.UnknownHostException;
import java.util.List;

/**
 * @author zhangxa
 */
public interface DataQualityService extends BaseService<DataQuality> {


    /**
     * 分页
     *
     * @param dataQualityDto 集合信息
     * @return 结果日志
     */
    PageInfo<QualityVo> pageList(DataQualityDto dataQualityDto);

    /**
     * 查询质量分析信息集合
     *
     * @param dataQualityDto 集合信息
     * @return 结果日志
     */
    List<DataQuality> selectList(DataQualityDto dataQualityDto);

    /**
     * 异步线程池执行任务
     *
     * @param taskChildInfo 子任务信息 任务信息
     */
    void asyncExcuteTask(TaskChildInfo taskChildInfo) throws UnknownHostException;

    /**
     * 数据预处理手动剔野
     *
     * @param handWinkingVo 被剔野信息集合
     * @return 结果日志
     */
    CheckResult<Object> handWinking(HandWinkingVo handWinkingVo);

    /**
     * 执行sql指定数据源
     *
     * @param dataSourceVo sql入参
     * @return 结果日志
     */
    CheckResult<Object> excuteRunSql(DataSourceVo dataSourceVo);

    /**
     * 特征分析图表
     *
     * @param dataFeatureDto 质量分析入参
     * @return 结果日志
     */
    CheckResult<Object> getFeatureEcharts(DataFeatureDto dataFeatureDto);

    /**
     * 获取质量分析报告
     *
     * @param reportVo 质量分析报告入参
     * @return 结果日志
     */
    DataQualityReport getReportInfos(ReportVo reportVo);

    /**
     * 根据卫星代号获取质量分析数据
     *
     * @param reportVo 分析入参
     * @return 结果日志
     */
    PageInfo<QualityVo> getQualityBySatelliteCode(ReportVo reportVo);

    /**
     * 根据sql查询pg库数据
     *
     * @param sql sql语句
     * @return List<DiagnoseMultipleParametersData>
     */
    List<DiagnoseMultipleParametersData> getClickHouseBySql(String sql);

}
